1. Erzeugen der benötigten Klassen
MLP {@link mscJNeuralNet.net.Net}
{@link mscJNeuralNet.connectors.INetConnector} für Initialisierung des MLP
{@link mscJNeuralNet.trainingAlgorithms.INetTrainingAlgorithm} zum Trainieren des MLP
2. Initialisieren des Netzes
MLP + {@link mscJNeuralNet.connectors.INetConnector}
3. Trainieren des Netzes
TRAININGSDATEN
Lernverfahren mit Netz verbinden
50 TRAININGSZYKLEN
Berechnen der aktuellen Netzperformanz (Soll-Ist Fehler)
Formatierte Ausgabe der Netzperformanz
package mscJNeuralNet.tests;
import mscJNeuralNet.netPerformanceStatistics.NetPerformanceReporter;
import mscJNeuralNet.connectors.INetConnector;
import mscJNeuralNet.connectors.RandomSymmetryBreakingNetConnector;
import mscJNeuralNet.net.Net;
import mscJNeuralNet.netPerformanceStatistics.NetPerformanceStatistics;
import mscJNeuralNet.netPerformanceStatistics.NetPerformanceStatisticsCalculator;
import mscJNeuralNet.net.PatternDoesNotMatchNetException;
import mscJNeuralNet.trainingAlgorithms.INetTrainingAlgorithm;
import mscJNeuralNet.trainingAlgorithms.RProp;
// Trainieren eines MLP
public class TestTrippleXorLearn{
public static void main(String argv[]){
// 1. Erzeugen der benötigten Klassen
// MLP {@link mscJNeuralNet.net.Net}
// MLP mit der gewünschten Schichtstruktur erstellen:
// Eingabeschicht: 3 Neuronen
// 1. Verdeckte Schicht: 3 Neuronen
// Ausgabeschicht: 1 Neuron
int [] layerSizesTrippleXOr = {3, 3, 1};
//* {@link mscJNeuralNet.net.Net} myNet = new Net(layerSizesTrippleXOr);
Net myNet = new Net(layerSizesTrippleXOr);
// BIAS wurde automatisch berücksichtigt.
// {@link mscJNeuralNet.connectors.INetConnector}
// Diese Klasse wird zum Initialisieren der Kantengewichte benötigt
INetConnector lNetConnectionAlgo = new RandomSymmetryBreakingNetConnector();
// {@link mscJNeuralNet.trainingAlgorithms.INetTrainingAlgorithm}
// Diese Klasse wird zum Trainieren eines MLP benötigt
INetTrainingAlgorithm lNetTrainAlgo = new RProp();
// 2. Initialisieren des Netzes
// MLP + {@link mscJNeuralNet.connectors.INetConnector}
// Mit der Instanz von {@link mscJNeuralNet.connectors.INetConnector} inititalisieren.
// Die Klasse {@link mscJNeuralNet.connectors.RandomSymmetryBreakingNetConnector} benötigt
// keine eigenen Kontrollparameter und wird daher mit dem Wert null aufgerufen.
lNetConnectionAlgo.connectNet(myNet, null);
// Nun ist das Netz verbunden und initialisiert.
// 3. Trainieren des Netzes
// TRAININGSDATEN
// Trainingsdaten bereitstellen
double [][] lTrippleXORtrainInput = {
{-1,-1,-1}, {-1,-1,1},
{-1,1,-1}, {-1,1,1},
{1,-1,-1}, {1,-1,1},
{1,1,-1}, {1,1,1}};
double [][] lTrippleXORtrainOutput = {
{-1},{1},
{1},{-1},
{1}, {-1},
{-1}, {1}};
// MLP + {@link mscJNeuralNet.trainingAlgorithms.INetTrainingAlgorithm}
// Lernverfahren {@link mscJNeuralNet.trainingAlgorithms.INetTrainingAlgorithm} mit Netz verbinden.
lNetTrainAlgo.setNet(myNet);
try{
// 50 TRAININGSZYKLEN
while (lNetTrainAlgo.getCycle()<50){
Net.train(lTrippleXORtrainInput, lTrippleXORtrainOutput, lNetTrainAlgo);
}
// {@link mscJNeuralNet.netPerformanceStatistics.NetPerformanceStatisticsCalculator}
// {@link mscJNeuralNet.netPerformanceStatistics.NetPerformanceStatistics}
// Berechnen der aktuellen Netzperformanz (Soll-Ist Fehler)
NetPerformanceStatistics lNetPerformance =
NetPerformanceStatisticsCalculator.calculateErrors(
myNet, lTrippleXORtrainInput, lTrippleXORtrainOutput);
// {@link mscJNeuralNet.netPerformanceStatistics.NetPerformanceReporter}
// Formatierte Ausgabe der Netzperformanz
NetPerformanceReporter.getNetPerformance(
lNetPerformance, lNetTrainAlgo.getCycle());
}
catch({@link mscJNeuralNet.net.PatternDoesNotMatchNetException} e){
// Wird aufgerufen, wenn die Lerndatensätze mehr Eingabe-/Ausgabewerte
// enthalten als Eingabe-/Ausgabeneuronen im MLP vorhanden sind.
e.printStackTrace();
}
}
}
Für eine anspruchsvollere Verwaltung des Lernvorgangs steht die Klasse
{@link mscJNeuralNet.trainer.NetTrainer} zur Verfügung, die u.a. trainieren
mehrerer Zyklen als nebenläufigen Prozess oder trainieren der Lerndaten in zufälliger Reihenfolge
unterstützt.
@author M. Serhat Cinar